package tx;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

import org.junit.Test;

import util.DBUtils;

public class TxTest {
	
	@Test
	public void transferAccounts() throws SQLException {
		// 1.得到连接
		Connection c = DBUtils.getConnection();
		// 2.关闭自动提交 (必须得到句柄之前关闭)
		c.setAutoCommit(false);
		// 3.得到句柄
		Statement s = c.createStatement();
		// 4.批量添加两个sql文   addBatch() 批量添加sql文
		s.addBatch("update card set money=money-20 where id=1 and money>=20");
		s.addBatch("update card set money=money+20 where id=2");
		// 5.批量执行(返回的是每一条sql执行后影响的行数的数组)
		int[] rows = s.executeBatch();  // {0,1}
		
		// 两个如果都是1就成功了，否则回滚
		for(int row : rows) {
			System.out.println(row);
			if (row == 0) {
				// 回滚
				c.rollback();
				break;
			}
		}
		// 提交事务
		c.commit();
		// 恢复自动提交
		c.setAutoCommit(true);
	}
}










